package com.tontron.framework.config;

import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.tontron.common.utils.SecurityUtils;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class CustomTenantHandler implements TenantLineHandler {

    private static List<String> ignoreTables = new ArrayList<>();

    //TODO 增加不需处理租户信息的表
    static {
        ignoreTables.add("sys_user");
        ignoreTables.add("sys_user_role");
        ignoreTables.add("sys_role");
        ignoreTables.add("sys_tenant");
        ignoreTables.add("sys_config");
        ignoreTables.add("sys_dept");
        ignoreTables.add("sys_menu");
        ignoreTables.add("sys_role");
        ignoreTables.add("sys_config");
        ignoreTables.add("sys_dict_data");
        ignoreTables.add("sys_dict_type");
        ignoreTables.add("sys_job");
        ignoreTables.add("sys_job_log");
        ignoreTables.add("sys_logininfor");
        ignoreTables.add("sys_oper_log");
        ignoreTables.add("sys_user_post");
        ignoreTables.add("sys_post");
        ignoreTables.add("sys_notice");
    }

    @Override
    public Expression getTenantId() {
        if(SecurityUtils.getLoginUser()!=null){
            // 假设有一个租户上下文，能够从中获取当前用户的租户
            Long tenantId = SecurityUtils.getLoginUser().getUser().getTenantId();
            // 返回租户ID的表达式，LongValue 是 JSQLParser 中表示 bigint 类型的 class
            return new LongValue(tenantId);
        }else {
            return new LongValue(0);
        }


    }

    @Override
    public String getTenantIdColumn() {
        return "tenant_id";
    }

    @Override
    public boolean ignoreTable(String tableName) {
        // 根据需要返回是否忽略该表
        return ignoreTables.contains(tableName);
    }

}
